package com.blacksheep.mtm.shiro.session;

import com.blacksheep.mtm.common.jedis.JedisClient;
import com.blacksheep.mtm.common.utils.ProtoBufUtil;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.UnknownSessionException;
import org.apache.shiro.session.mgt.SimpleSession;
import org.apache.shiro.session.mgt.eis.AbstractSessionDAO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

public class SessionRedisDao  {
//    private Logger logger = LoggerFactory.getLogger(this.getClass());
//    @Autowired
//    private JedisClient jedisClient;
//
//    /**
//     * The Redis key prefix for the sessions
//     */
//    private static final String KEY_PREFIX = "shiro_redis_session:";
//
//    @Override
//    public void update(Session session) throws UnknownSessionException {
//        this.saveSession(session);
//    }
//
//    @Override
//    public void delete(Session session) {
//        if (session == null || session.getId() == null) {
//            logger.error("session or session id is null");
//            return;
//        }
//        jedisClient.del(KEY_PREFIX + session.getId());
//    }
//
//    @Override
//    public Collection<Session> getActiveSessions() {
//        Set<Session> sessions = new HashSet<Session>();
//        Set<byte[]> keys = jedisClient.keys(KEY_PREFIX + "*");
//        if(keys != null && keys.size()>0){
//            for(byte[] key : keys){
//                Session s = (Session)SerializerUtil.deserialize(redisManager.get(SerializerUtil.deserialize(key)));
//                sessions.add(s);
//            }
//        }
//        return sessions;
//    }
//
//    @Override
//    protected Serializable doCreate(Session session) {
//        Serializable sessionId = this.generateSessionId(session);
//        this.assignSessionId(session, sessionId);
//        this.saveSession(session);
//        return sessionId;
//    }
//
//    @Override
//    protected Session doReadSession(Serializable sessionId) {
//        if(sessionId == null){
//            logger.error("session id is null");
//            return null;
//        }
//        byte[] id = (KEY_PREFIX + sessionId).getBytes();
//        byte[] sessionByte = jedisClient.getObject(id);
//        Session s = ProtoBufUtil.deserializer(sessionByte,Session.class);
//        return s;
//    }
//
//    private void saveSession(Session session) throws UnknownSessionException{
//        if (session == null || session.getId() == null) {
//            logger.error("session or session id is null");
//            return;
//        }
//        //设置过期时间
//        long expireTime = 1800000l;
//        session.setTimeout(expireTime);
//        byte[] sessionByte = ProtoBufUtil.serializer(session);
//        byte[] id = (KEY_PREFIX + session.getId()).getBytes();
//        jedisClient.setObject(id, sessionByte);
//    }

}
